﻿using System;

namespace EnumApplication
{
    class Program
    {
        enum Parmission { Create, Read, Update, Delete };
        static void Main(string[] args)
        {
            // 1、给用户创建、读取，修改和删除的权限
            var parmission = Parmission.Create | Parmission.Read | Parmission.Update | Parmission.Delete;

            // 2、去掉用户的修改和删除权限
            parmission = parmission & ~Parmission.Update;
            parmission = parmission & ~Parmission.Delete;

            // 3、给用户加上修改的权限
            parmission = parmission | Parmission.Update;

            // 4、判断用户是否有创建的权限
            var isCreate = (parmission & Parmission.Create) != 0;
            // 或者
            var isCreate1 = (parmission & Parmission.Create) == Parmission.Create;
            /*
             
这时parmission枚举的值将变成0+1+4=5，它的ToSting()将变成“parmission.Create，
parmission.Read”,parmission.Update; 这里我们可以解释为什么第五个值Delete是8而不能成为5。
也就是说它的值不应该是前几项值的复合值。一个比较简单的方法
就是用2的n次方来依次位每一项赋值，例如：1，2，4，8，16，32，64.......。
             
             */
        }
    }
}